Bouns.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use client";
  2. import { DepositsRep } from "@/api/user";
  3. import { Pagination } from "@/types";
  4. import { server } from "@/utils/client";
  5. import { useSetState } from "ahooks";
  6. import { InfiniteScroll } from "antd-mobile";
  7. import { useTranslations } from "next-intl";
  8. import { useRef } from "react";
  9. import Message from "./components/Message";
  10. type Params = { current_page: number; page_size: number; use_page: boolean };
  11. const getTransactionsApi = async (data: Params) => {
  12. return server.post<DepositsRep[]>({
  13. url: "/v1/api/user/user_transactions",
  14. data: data,
  15. });
  16. };
  17. const Bouns = () => {
  18. const t = useTranslations();
  19. const params = useRef({ current_page: 0, page_size: 20, use_page: true });
  20. const [sourceData, setSourceData] = useSetState<{
  21. list: DepositsRep[];
  22. page: Partial<Pagination>;
  23. }>({ list: [], page: { is_end: false } });
  24. const getDepositsData = async () => {
  25. return getTransactionsApi(params.current).then((res) => {
  26. const newData = res.data.map((item) => {
  27. return {
  28. ...item,
  29. title: t(
  30. `${item.type === 16 ? "activityType" : "bonusType"}.${item.type === 16 ? item.sub_type : item.type}`
  31. ),
  32. };
  33. });
  34. setSourceData((value) => ({ page: res.page, list: [...value.list, ...newData] }));
  35. return res;
  36. });
  37. };
  38. const loadMore = async () => {
  39. params.current.current_page += 1;
  40. await getDepositsData();
  41. return Promise.resolve();
  42. };
  43. return (
  44. <>
  45. <Message data={sourceData.list} />
  46. <InfiniteScroll loadMore={loadMore} hasMore={!sourceData.page.is_end!} />
  47. </>
  48. );
  49. };
  50. export default Bouns;